--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / rnode / transports / SerialTransport.js
Displaying Raw • Download
meshchatx/src/frontend/js/rnode/transports/SerialTransport.js e46eed7f7e2637c4c21f4c772d908ef75ec49e6a (e46eed7f) Text, 3.30 KB
Tff7b72import Te6edf3Transport Tff7b72from Ta5d6ff"./Transport.js"Tb4b4b4;
T8b949e/**
* Web Serial transport.
*
* Wraps an underlying SerialPort (either the native navigator.serial port or
* the web-serial-polyfill port that bridges WebUSB devices). Most of the
* real work is delegated to the wrapped port; the wrapper is mainly here so
* the rest of the codebase has a single uniform API and so error reporting
* surface area is centralised.
*/
Tff7b72export Tff7b72default Tff7b72class Te6edf3SerialTransport Tff7b72extends Te6edf3Transport Tb4b4b4{
T8b949e/**
* @param {SerialPort} port wrapped serial port
* @param {{ polyfilled?: boolean, env?: object }} [options]
*/
Tff7b72constructorTb4b4b4(Te6edf3portTb4b4b4, Te6edf3options Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72superTb4b4b4(Ta5d6ff"serial"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3portTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"SerialTransport requires a SerialPort instance"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3port Tff7b72= Te6edf3portTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3polyfilled Tff7b72= Tffa657BooleanTb4b4b4(Te6edf3optionsTb4b4b4.Te6edf3polyfilledTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3env Tff7b72= Te6edf3optionsTb4b4b4.Te6edf3env Tff7b72|| Tb4b4b4(Tff7b72typeof Tffa657window Tff7b72!== Ta5d6ff"undefined" Tff7b72? Tffa657window Tff7b72: Tffa657globalThisTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3opened Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
T8b949e/**
* Request a port from the user via navigator.serial.requestPort. Returns
* a SerialTransport wrapper or throws a descriptive error.
*
* @param {{ filters?: Array, env?: object }} [options]
*/
Tff7b72static Tff7b72async Te6edf3requestTb4b4b4(Te6edf3options Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3env Tff7b72= Te6edf3optionsTb4b4b4.Te6edf3env Tff7b72|| Tb4b4b4(Tff7b72typeof Tffa657window Tff7b72!== Ta5d6ff"undefined" Tff7b72? Tffa657window Tff7b72: Tffa657globalThisTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3envTb4b4b4.Te6edf3navigatorTff7b72?Tb4b4b4.Te6edf3serialTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3err Tff7b72= Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"web_serial_unavailable"Tb4b4b4)Tb4b4b4;
Te6edf3errTb4b4b4.Te6edf3code Tff7b72= Ta5d6ff"WEB_SERIAL_UNAVAILABLE"Tb4b4b4;
Tff7b72throw Te6edf3errTb4b4b4;
Tb4b4b4}
Tff7b72let Te6edf3portTb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3port Tff7b72= Tff7b72await Te6edf3envTb4b4b4.Te6edf3navigatorTb4b4b4.Te6edf3serialTb4b4b4.Te6edf3requestPortTb4b4b4(Tb4b4b4{
Te6edf3filtersTff7b72: Te6edf3optionsTb4b4b4.Te6edf3filters Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3causeTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3message Tff7b72= Te6edf3causeTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Tffa657StringTb4b4b4(Te6edf3causeTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3causeTff7b72?Tb4b4b4.Te6edf3name Tff7b72=== Ta5d6ff"NotFoundError" Tff7b72|| Ta5d6ff/No port selected/iTb4b4b4.Te6edf3testTb4b4b4(Te6edf3messageTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3err Tff7b72= Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"no_port_selected"Tb4b4b4)Tb4b4b4;
Te6edf3errTb4b4b4.Te6edf3code Tff7b72= Ta5d6ff"NO_PORT_SELECTED"Tb4b4b4;
Te6edf3errTb4b4b4.Te6edf3cause Tff7b72= Te6edf3causeTb4b4b4;
Tff7b72throw Te6edf3errTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3err Tff7b72= Tff7b72new Tf85149ErrorTb4b4b4(Te6edf3messageTb4b4b4)Tb4b4b4;
Te6edf3errTb4b4b4.Te6edf3code Tff7b72= Ta5d6ff"PORT_REQUEST_FAILED"Tb4b4b4;
Te6edf3errTb4b4b4.Te6edf3cause Tff7b72= Te6edf3causeTb4b4b4;
Tff7b72throw Te6edf3errTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3polyfilled Tff7b72= Tffa657BooleanTb4b4b4(Te6edf3envTb4b4b4.Te6edf3serial Tff7b72&& Te6edf3envTb4b4b4.Te6edf3navigatorTb4b4b4.Te6edf3serial Tff7b72=== Te6edf3envTb4b4b4.Te6edf3serialTb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72new Te6edf3SerialTransportTb4b4b4(Te6edf3portTb4b4b4, Tb4b4b4{ Te6edf3polyfilledTb4b4b4, Te6edf3env Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72async Te6edf3openTb4b4b4(Te6edf3opts Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3baudRate Tff7b72= Tff7b72typeof Te6edf3optsTb4b4b4.Te6edf3baudRate Tff7b72=== Ta5d6ff"number" Tff7b72? Te6edf3optsTb4b4b4.Te6edf3baudRate Tff7b72: T79c0ff115200Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3portTb4b4b4.Te6edf3openTb4b4b4(Tb4b4b4{ Te6edf3baudRate Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3readable Tff7b72= Tff7b72thisTb4b4b4.Te6edf3portTb4b4b4.Te6edf3readableTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3writable Tff7b72= Tff7b72thisTb4b4b4.Te6edf3portTb4b4b4.Te6edf3writableTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3opened Tff7b72= Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72async Te6edf3closeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3opened Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Tff7b72thisTb4b4b4.Te6edf3portTb4b4b4.Te6edf3close Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3portTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3readable Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3writable Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72async Te6edf3setSignalsTb4b4b4(Te6edf3signalsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Tff7b72thisTb4b4b4.Te6edf3portTb4b4b4.Te6edf3setSignals Tff7b72=== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3portTb4b4b4.Te6edf3setSignalsTb4b4b4(Te6edf3signalsTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Te6edf3canFlashEsp32Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Te6edf3canFlashNrf52Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Te6edf3canManageDeviceTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Te6edf3descriptionTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3polyfilled Tff7b72? Ta5d6ff"serial-polyfill" Tff7b72: Ta5d6ff"serial"Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────